{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Parte 5 - Bienvenido a la caja de arena\n",
    "\n",
    "Últimamente estuvimos inicializando nuestro gancho y todos nuestros trabajadores a mano cada vez. Esto puede ser algo molesto cuando solo estás jugando / aprendiendo con las interfaces. Asi que, de ahora en adelante vamos a crear todas estas variables usando una funcion especial conveniente.\n",
    "\n",
    "Autores:\n",
    "\n",
    "- Andrew Trask - Twitter: @iamtrask\n",
    "- Jason Paumier - Github: @Jasopaum\n",
    "- Théo Ryffel - Twitter: @theoryffel\n",
    "\n",
    "Traducción:\n",
    "\n",
    "- Arturo Márquez Flores - Twitter: @arturomf94\n",
    "- Ricardo Pretelt - Twitter: @ricardopretelt\n",
    "- Carlos Salgado - Github: @socd06"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import syft as sy\n",
    "sy.create_sandbox(globals())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ¿Qué nos da la caja de arena?\n",
    "\n",
    "Como puedes ver arriba, creamos varios trabajadores virtuales y cargamos muchos conjutos de datos de prueba, distribuyéndolos alrededor de varios trabajadores para poder practicar usando técnicas preservadoras de la privacidad como el Aprendizaje Federado.\n",
    "\n",
    "Creamos seis trabajadores..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "workers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Además poblamos muchas de las variables globales que podemos usar inmediatamente "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "hook"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bob"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Parte 2: Funcionalidad de Buscado de Trabajadores\n",
    "\n",
    "Un aspecto importante de hacer ciencia de datos remota es que que queremos la habilidad de buscar conjuntos de datos en una máquina remota. Como en un laboratorio de investigación que quiere consultar hospitales por conjuntos de datos que quizás sean \"de radio\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.Tensor([1,2,3,4,5])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = torch.tensor([1,2,3,4,5]).tag(\"#fun\", \"#boston\", \"#housing\").describe(\"The input datapoints to the boston housing dataset.\")\n",
    "y = torch.tensor([1,2,3,4,5]).tag(\"#fun\", \"#boston\", \"#housing\").describe(\"The input datapoints to the boston housing dataset.\")\n",
    "z = torch.tensor([1,2,3,4,5]).tag(\"#fun\", \"#mnist\",).describe(\"The images in the MNIST training dataset.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = x.send(bob)\n",
    "y = y.send(bob)\n",
    "z = z.send(bob)\n",
    "\n",
    "# esto busca una coincidencia exacta dentro de la etiqueta o dentro de la descripción\n",
    "results = bob.search([\"#boston\", \"#housing\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(results[0].description)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Parte 3: Rejilla Virtual \n",
    "\n",
    "Una rejilla virtual es simplemente una recolección de trabajadores que te dan funciones convenientes para cuando quieras crear un conjunto de datos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "grid = sy.PrivateGridNetwork(*workers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "results = grid.search(\"#boston\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "boston_data = grid.search(\"#boston\",\"#data\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "boston_target = grid.search(\"#boston\",\"#target\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}